package br.lsi.supercurriculum.beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;

import br.lsi.supercurriculum.entidades.Certificado;
import br.lsi.supercurriculum.entidades.Pessoa;
import br.lsi.supercurriculum.entidades.Profissional;
import br.lsi.supercurriculum.entidades.Usuario;
import br.lsi.supercurriculum.facades.PessoaFacadeImpl;
import br.lsi.supercurriculum.interfaces.PessoaFacade;

@ManagedBean(name = "CertificadoBean")
@RequestScoped
public class CertificadoBean implements Serializable {

	private static final long serialVersionUID = 1L;

	private Pessoa pessoa;
	private Profissional profissional;
	private Certificado certificado;

	private List<Certificado> certificados = new ArrayList();

	private PessoaFacade pessoaFacade;
	private Usuario usuario;

	public void addCerificados(Certificado certificado) {
		certificados.add(certificado);
	}

	public CertificadoBean() {
		this.pessoaFacade = new PessoaFacadeImpl();
		this.novoCertificado();
		this.getUserLogin();
	}

	private void novoCertificado() {
		pessoa = this.pessoaFacade.getPessoa(usuario);
		if (pessoa == null) {
			this.pessoa = new Pessoa();
			// this.pessoa.setCertificado(certificado);
		}
	}

	private void getUserLogin() {
		usuario = new Usuario();
		SecurityContext context = SecurityContextHolder.getContext();
		if (context instanceof SecurityContext) {
			Authentication authentication = context.getAuthentication();
			if (authentication instanceof Authentication) {
				usuario.setUsername(((User) authentication.getPrincipal())
						.getUsername());
			}
		}
	}

	public void salvar() {
		if (pessoa != null) {
			this.pessoaFacade.salvarOuAtualizar(this.pessoa);
			this.profissional.setCertificados(certificados);
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage("Dados  atualizados!"));

			System.out.println(this.pessoa.getNome());
		}
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public Certificado getCertificado() {
		return certificado;
	}

	public void setCertificado(Certificado certificado) {
		this.certificado = certificado;
	}

	public PessoaFacade getPessoaFacade() {
		return pessoaFacade;
	}

	public void setPessoaFacade(PessoaFacade pessoaFacade) {
		this.pessoaFacade = pessoaFacade;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Certificado> getCertificados() {
		return certificados;
	}

	public void setCertificados(List<Certificado> certificados) {
		this.certificados = certificados;
	}

}